package de.uniluebeck.itm.wsn.drivers.mock;
import com.google.common.collect.Maps;
import com.google.inject.AbstractModule;
import com.google.inject.Singleton;
import com.google.inject.TypeLiteral;
import com.google.inject.assistedinject.FactoryModuleBuilder;
import com.google.inject.matcher.Matchers;
import com.google.inject.name.Names;
import de.uniluebeck.itm.wsn.drivers.core.Connection;
import de.uniluebeck.itm.wsn.drivers.core.Device;
import de.uniluebeck.itm.wsn.drivers.core.operation.*;
import de.uniluebeck.itm.wsn.drivers.core.serialport.SerialPortConnection;
import de.uniluebeck.itm.wsn.drivers.core.serialport.SerialPortProgrammingMode;
import de.uniluebeck.itm.wsn.drivers.core.serialport.SerialPortProgrammingModeInterceptor;
import javax.annotation.Nullable;
import java.util.Map;
/**
* Configures Guice dependency injection for a mock device.
*
* @author Malte Legenhausen
* @author Daniel Bimschas
*/
public class MockModule extends AbstractModule {
private final Map<String, String> configuration;
public MockModule(@Nullable final Map<String, String> configuration) {
this.configuration = configuration;
}
@Override
protected void configure() {
MockOperationInterceptor interceptor = new MockOperationInterceptor();
requestInjection(interceptor);
bindInterceptor(Matchers.any(), Matchers.annotatedWith(SerialPortProgrammingMode.class), interceptor);
final TypeLiteral<Map<String, String>> mapLiteral = new TypeLiteral<Map<String, String>>() {
};
bind(mapLiteral).annotatedWith(Names.named("configuration"))
.toInstance(configuration != null ? configuration : Maps.<String, String>newHashMap());
bind(Device.class).to(MockDevice.class);
bind(MockConfiguration.class).in(Singleton.class);
install(new FactoryModuleBuilder()
.implement(EraseFlashOperation.class, MockEraseFlashOperation.class)
.implement(GetChipTypeOperation.class, MockGetChipTypeOperation.class)
.implement(IsNodeAliveOperation.class, DefaultIsNodeAliveOperation.class)
.implement(ProgramOperation.class, MockProgramOperation.class)
.implement(ReadFlashOperation.class, MockReadFlashOperation.class)
.implement(ReadMacAddressOperation.class, MockReadMacAddressOperation.class)
.implement(ResetOperation.class, MockResetOperation.class)
.implement(WriteFlashOperation.class, MockWriteFlashOperation.class)
.implement(WriteMacAddressOperation.class, MockWriteMacAddressOperation.class)
.build(OperationFactory.class)
);
}
}